# coding: utf-8
# スプライトっぽいデータをバイナリ化してみる

import struct, binascii

# ----------------------------------------------------------------
# スプライトっぽいデータを作成
# ----------------------------------------------------------------
sprite = {
          "pos"     : [32, 64],
          "size"    : [100, 200],
          "scale"   : [1, 1],
          "color"   : [255, 0, 0, 255],
          "visible" : True,
          "rotation": 0,
          "name"    : "palyer"
          }

# ----------------------------------------------------------------
# スプライトの値をリスト化
# ----------------------------------------------------------------
values = []
values.extend(sprite["pos"])
values.extend(sprite["size"])
values.extend(sprite["scale"])
values.extend(sprite["color"])
values.append(int(sprite["visible"]))
values.append(sprite["rotation"])
values.append(sprite["name"].encode())

# ----------------------------------------------------------------
# スプライトのデータをパックする
# ----------------------------------------------------------------
s = struct.Struct("< 2I 2I 2I 4B b I 8s")
packed_value = s.pack(*values)

# ----------------------------------------------------------------
# アンパックする
# ----------------------------------------------------------------
unpacked_value = s.unpack(packed_value)

# ----------------------------------------------------------------
# 表示
# ----------------------------------------------------------------
print("Format String :", s.format)
print("Original Value:", values)
print("Packed Value  :", packed_value)
print("0xPacked Value:", binascii.hexlify(packed_value))
print("Size          :", s.size)
print("Unpacked Value:", unpacked_value)


""" 実行結果
Format String : b'< 2I 2I 2I 4B b I 8s'
Original Value: [32, 64, 100, 200, 1, 1, 255, 0, 0, 255, 1, 0, b'palyer']
Packed Value  : b' \x00\x00\x00@\x00\x00\x00d\x00\x00\x00\xc8\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xff\x00\x00\xff\x01\x00\x00\x00\x00palyer\x00\x00'
0xPacked Value: b'200000004000000064000000c80000000100000001000000ff0000ff010000000070616c7965720000'
Size          : 41
Unpacked Value: (32, 64, 100, 200, 1, 1, 255, 0, 0, 255, 1, 0, b'palyer\x00\x00')
"""









